#include<bits/stdc++.h>
using namespace std;
const int N=65;

int n;
int arr[N];
int sum = 0;
int use[N];


// inline int check(int len){
//     vector<int> leave;
//     int m = sum/len;
//     for(int i=1;i<=m;i++) leave.emplace_back(len);
//     for(int i=n;i>=1;i--){
//         sort(leave.begin(),leave.end());
//         int l=0, r=m-1;
//         if(arr[i]>leave[m-1]) return 0;
//         while(l<r){
//             int mid = (r-l)/2+l;
//             if(arr[mid]<=leave[mid]) r=mid;
//             else l=mid+1;
//         }
//         leave[l] -= arr[i];
//     }
//     return 1;
// }

void dfs(int idx,int tsum,int left_len){
    if(idx==tsum){
        printf("%d\n",sum/tsum);
        exit(0);
    }
    if(left_len==0){
        dfs(idx+1,tsum,sum/tsum);
        return;
    }
    for(int i=1;i<=n;i++){
        if(tsum>=arr[i]&&!use[i]){
            use[i] = 1;
            dfs(idx,tsum,left_len-arr[i]);
            use[i] = 0;
        }
    }
}

inline bool sort1(int a,int b){
    return a>b;
}

int main(){
    scanf("%d",&n);
    int mv=1;
    for(int i=1;i<=n;i++){
        scanf("%d",&arr[i]);
        mv = max(mv,arr[i]);
        sum += arr[i];
    }
    if(mv==1){
        printf("1\n");
        return 0;
    }
    sort(arr+1,arr+n+1,sort1);

    for(int i=mv;i<=sum;i++){
        if(sum%i==0){
            memset(use,0,sizeof(use));
            dfs(0,sum/i,i);
        }
    }
    return 0;
}